Skip to content

黑客学习记录 - 5 - sql、xss

字数
556 字
阅读时间
3 分钟

SQLMAP
https://github.com/sqlmapproject/sqlmap

  • sqlmap.py -u “http”
  • sqlmap.py -u “http” —dbs 查看数据库
  • sqlmap.py -u “http” -D test —table //查看数据库中的表
  • sqlmap.py -u “http” -D test -T users —dump

sqlmap要是能图形化就好了,打一堆命令不累吗

高级注入技巧

宽字节注入

PHP 5.3.0之前默认开启魔术引号 相当于 addslashes() but 数据库如果采用GBK字符,会存在缺陷

  • GBK编码范围
  • 总体编码范围为 8140-FEFE
  • 首字节在 81-FE 之间
  • 尾字节在 40-FE 之间

输入 id=1%bf%27 or 1--+就会产生漏洞

  • %bf%27中%27是单引号,在经过服务器时,会在前面加上反斜线
  • 反斜线是%5c于是就变成%bf%5c%27
  • 5c在GBK是合法的尾字节
  • %bf%5c= 汉字
  • 单引号被执行,代码可以注入

cookie注入

程序使用 request获取数据,过滤get post,却没有过滤 cookie

绕过WAF

if ($param = $_SERVER['QUERY_STRING']){
                $op = fopen('1.txt','a+');
                fwrite($op, $param."\r\n");
                fclose($op);
        }

将http参数内容写到文件,大量payload Fuzz,得到的内容即是

XSS

编码绕过方式:需要 eval函数

  • String.fromCharCode() 把ASCII转换为字符串
  • HEX转码
  • js + 16进制转码
  • unicode编码

大小写混合

超长字符串截断注入

mysql设置数据时会定义数据长度,当传入数据超出长度时,会自动截断。

例如可以注册一个用户 admin (后面N多空格)

最后截断用户名就是admin,当然过滤很简单,只用过滤空格即可

DATA URLS协议

html
<object data="data:text/html;base64,我们的完整语句"></object>
js
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
		</object>

Flash xss

  • getURL (“javascript:alert(document.domain)”,”_self”,”GET”);

XSS大概流程

  1. 寻找输入位置
  2. xss探针 '';!--"<XSS>=&{()}
  3. 根据输出位置(script标签内,style标签内,普通标签内,标签属性内)进行特殊符号的过滤情况
  4. 对所需要的特殊符号进行编码绕过
  5. 根据攻击场景需要构建payload

过狗一句话

  • 文件包含
  • 代码加密

撰写